<template>
    <li>
        <label>
            <!--
                这里使用 :checked="true/false" 来动态控制 check 表单元素是否有属性 checked，如果为 true 则有，反之则没有。
                @change 绑定一个 change 事件，也就是当 checkbox 的状态发生改变之后，回调 handleCheck 方法
            -->
            <input type="checkbox" :checked="thing.done" @change="handleCheck(thing.id)"/>
            <!-- 如下代码也能实现功能，但是不太推荐，因为有点违反原则，因为修改了 props -->
            <!--<input type="checkbox" :checked="thing.done" @change="handleCheck(thing.id)"/>-->
            <span>{{thing.title}}</span>
        </label>
        <button class="btn btn-danger" @click="handleDelete(thing.id)">删除</button>
    </li>
</template>

<script>
    export default {
        name: "Item",
        // 声明接收父组件传递过来的对象，对象名为 thing
        props: ['thing', 'checkTodo', 'deleteTodo'],
        methods: {
            // 勾选 or 取消勾选
            handleCheck(id) {
                // 通知 APP 组件将对应的待办对象的 done 值取反
                this.checkTodo(id);
            },
            // 删除
            handleDelete(id) {
                if (confirm('确定删除吗？')) {
                    this.deleteTodo(id);
                }
            }
        }
    }
</script>

<style scoped>
    /*item*/
    li {
        list-style: none;
        height: 36px;
        line-height: 36px;
        padding: 0 5px;
        border-bottom: 1px solid #ddd;
    }

    li label {
        float: left;
        cursor: pointer;
    }

    li label li input {
        vertical-align: middle;
        margin-right: 6px;
        position: relative;
        top: -1px;
    }

    li button {
        float: right;
        display: none;
        margin-top: 3px;
    }

    li:before {
        content: initial;
    }

    li:last-child {
        border-bottom: none;
    }

    li:hover {
        background-color: #dddddd;
    }

    li:hover button {
        display: block;
    }
</style>